import java.util.*;
import java.util.stream.*;;
/**
 * 
 * 数组中出现次数超过一半的数字
 * 
 * 描述

给一个长度为 n 的数组，数组中有一个数字出现的次数超过数组长度的一半，请找出这个数字。
例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次，超过数组长度的一半，因此输出2。

数据范围：
n
≤
50000
n≤50000，数组中元素的值 
0
≤
v
a
l
≤
10000
0≤val≤10000
要求：空间复杂度：
O
(
1
)
O(1)，时间复杂度 
O
(
n
)
O(n)
输入描述：

保证数组输入非空，且保证有解
 */
public class 数组中出现次数超过一半的数字 {
    
    public static void main(String[] args) {

        int[] nums = new int[]{1,2,3,2,2,2,5,4,2};

        System.out.println(MoreThanHalfNum_Solution(nums));

    }

    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * 
     * @param numbers int整型一维数组 
     * @return int整型
     */
    public static int MoreThanHalfNum_Solution (int[] numbers) {
        // write code here

        int result = -1;

        HashMap<Integer, Integer> map = new HashMap();

        for(int num : numbers){
            map.put(num, map.getOrDefault(num, 0)+1);

            if(map.get(num) > (numbers.length / 2)){

                result = num;
                break;
            }

        }

        return result;

    }
}
